/** 构造函数 */
import _ from 'lodash';
import request from './request';
import config from '../config';

const { baseUrl } = config;

/**
 * 传入{key:{ url, defaultParams, method, type}}结构的对象，构造一个service，替代原本的大量重复代码
 * 目前接口都是以post方式请求
 * 请求参数的区别也只是json和formData的区别
 * 
 * 后面需要支持其它的请求方式再做优化
 * 传入方式定义为key: {}的方式就是为了后面兼容问题预留字段
 * 目前 method, type 两个字段暂时没有用到
 * 
 * @param {Object} paths
 * @returns {Object}
 */

export default function makeApi(paths) {
    const obj = {};
    for (const k in paths) {
        obj[k] = (params) => {
            const { url, defaultParams } = paths[k];
            const pathUrl = `${baseUrl}${url}`;

            let body;
            if (Object.prototype.isPrototypeOf.call(window.FormData.prototype, params)) { // 应为JSON.stringify(formData)为'{}',所以要先排除
                body = params;
            } else if (!params || JSON.stringify(params) === '{}') { // 因为paramsControl已经把参数params默认为{}
                body = defaultParams || {};
            } else {
                body = _.cloneDeep(params);
            }

            return request(pathUrl, {
                method: 'post',
                body,
            });

        };
    }
    return obj;
}
